Add hover previews to calendar events - #2598
Conversation
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
Visual recap — skippedThe visual recap job did not run for this pull request. This is informational only and does not block the PR. Recap skipped for |
There was a problem hiding this comment.
Builder reviewed your changes — looks good ✅
Review Details
Code Review Summary
PR #2598 adds a localized, read-only hover preview around ordinary Month and Week calendar events while retaining the existing EventDetailPopover as the authoritative click/details path. The implementation cleanly separates meeting-link extraction, forwards trigger props and refs through EventCard, uses a portaled Radix HoverCard with collision-aware side placement, and explicitly suppresses the preview for mobile, working-location/out-of-office events, pointer-down, and parent drag state. The added unit coverage exercises trigger composition, metadata rendering, attendee truncation, meeting-link selection, and location deduplication.
Risk assessment: Standard (UI interaction/state behavior with a shared event utility, but no auth, data, route, or schema changes).
No confirmed actionable bugs were found after comparing the parallel reviews. One agent flagged the pointer listener cleanup, but removeEventListener matching depends on the capture flag, not the once option, so the current cleanup is valid. Another flagged the pointerover test event, but React's pointer-enter synthetic event is delegated from pointerover, so that test is intentional and valid.
✅ Good patterns: existing detail behavior remains authoritative; preview state is isolated; meeting-link logic is shared rather than duplicated; portal rendering avoids calendar layout shifts; interaction suppression covers the main drag/detail paths.
🧪 Browser testing: Attempted after the review; all planned Calendar flows were blocked because browser-testing executors had no Chrome automation tools available, despite retry. No browser behavior was claimed as verified.
Problem
Calendar's compact Month and Week event cards often hide the context needed to recognize or join an event. Opening full details works, but it is heavier than a quick glance and interrupts scanning a dense calendar.
Approach
Add a small, read-only preview beside an individual event after a short hover. The preview is layered over the calendar instead of resizing or moving events, while existing full-detail, drag, and resize behavior remains authoritative.
This deliberately applies only to ordinary Month and Week events. Day already has richer inline cards, and status-event lanes keep their existing rendering.
What changed
EventCardforward native button props and refs so overlay triggers compose with the real event control.Safety and operations
This is a presentation change with no schema, action, route, authentication, credential, or stored-data migration. Reverting the preview wrapper restores the previous UI. The Toolkit change is an additive export covered by a patch changeset.
Verification
6d0466f68610d55bef798e5a9e4f06a9ed42e317completed with 58 successful, 42 skipped, zero failed, and zero pending checks.git diff --checkpassed.Join Meet, but the tester's context-local browser tab disappeared between the short turns needed to finish bootstrap and begin H1 (Existing tabs: none). H2-H7 were not executed, and no implementer interaction is being substituted.Review focus
EventDetailPopoverpreserve existing click/sidebar behavior while isolating hover state?Required before readiness